package com.caocaog.market.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.caocaog.market.entity.ShopType;
import com.caocaog.market.entity.dto.ShopTypeTree;

import javax.annotation.Nullable;
import java.util.List;

/**
 * 店铺分类
 *
 * @author chechen
 * @date 2022-11-03
 */
public interface ShopTypeService extends IService<ShopType> {


    /**
     * 店铺分类树
     *
     * @param siteId       当前分站id，为null时不校验黑名单
     * @param isShowFreeze 是否展示冻结的节点 为true时展示所有节点
     * @return 店铺分类树
     */
    List<ShopTypeTree> getShopTypeTree(@Nullable String siteId, @Nullable Boolean isShowFreeze);


    /**
     * 根据id获取店铺分类
     *
     * @param id 主键
     * @return 店铺分类
     */
    ShopType getShopTypeById(Long id);


    /**
     * 获取全部店铺分类列表
     *
     * @return 店铺分类列表
     */
    List<ShopType> getAllShopTypeList();


    /**
     * 按parentId查询店铺列表
     *
     * @param parentId 父级id
     * @return 店铺分类列表
     */
    List<ShopType> findShopTypeListByParentId(Long parentId);


    /**
     * 新增店铺分类
     *
     * @param shopType 店铺分类
     * @return 受影响行数
     */
    int addShopType(ShopType shopType);


    /**
     * 更新店铺分类
     *
     * @param shopType 店铺分类
     * @return 受影响行数
     */
    int updateShopType(ShopType shopType);


    /**
     * 删除店铺分类
     * 会一并删除所有分支
     *
     * @param ids 店铺分类ids
     * @return 受影响行数
     */
    int deleteShopType(Long... ids);


    /**
     * 变更店铺分类状态
     *
     * @return 受影响行数
     */
    int changeShopTypeStatus(Long id);


    /**
     * 添加分站ids到店铺分类黑名单中
     *
     * @param id      店铺分类id
     * @param siteIds 分站ids
     * @return 受影响行数
     */
    int addBlacklistInShopType(Long id, String... siteIds);

}
